Android逆向笔记(二):去除广告、破解签名校验 案例 您所在的位置:网站首页 安卓 开屏广告去除 Android逆向笔记(二):去除广告、破解签名校验 案例

Android逆向笔记(二):去除广告、破解签名校验 案例

2023-06-22 10:24| 来源: 网络整理| 查看: 265

上一篇文章介绍了逆向工具的基本用法,本篇就不在赘述有关工具使用的部分,详见: Android逆向笔记(一):逆向工具使用,简单的代码插入、修改包名/文案 示例

注:本文仅供学习参考,禁止用于任何非法用途

这次就用之前介绍的方法和工具,来实际尝试一下破解一个app,还是以Google Play 某头部APP为例(我会把关键特征打码,如果还是有同学认出来了,还请低调,大家交流一下技术就好)

目标:去除广告App广告重新打包,并绕过签名校验

去除广告

首先要去除广告,这个在实现上很简单,难点在于你要判断这个包用的是什么类型的广告、哪家广告商(通常通过找包名来判断),需要你对各个广告商的SDK有一定了解,起码知道怎么加载广告,这里示例的APP,很容易就可以找出来,使用的是Google Ads: 在这里插入图片描述

– 确定了是Google Ads,那么就去看看其SDK的使用方法,找到 Googel Admob 开发文档,找到初始配置方法如下: 在这里插入图片描述

可以看到,和大多数APP一样,需要在Manifest中配置一个Google Admob的 AppID,看到这里,基本可以肯定,只要这个ID不对,广告一定是无法初始化成功的,而APP上的广告,不可能因为广告加载失败,就block用户操作的,所以只要改动这个AppID,让他广告加载失败,就基本达到了去除广告的目的,但仅限弹出式广告 和 Banner广告 在这里插入图片描述 在这里插入图片描述

还有有一种 “看视频得奖励” 的广告,叫做 激励广告,这种广告加载失败是无法获得奖励的,要处理这种广告,需要对SDK使用更熟悉,在代码中删除广告部分代码,直接调用观看完成后的奖励逻辑,本例先不考虑这种情况,现在重新打包试一下效果: 在这里插入图片描述 很尴尬,被发现了 -_- ,这明显是因为重新打包后签名校验不通过导致,那就继续弄他!

破解签名校验

现在已知的信息就是这一个弹窗,那么破解签名该从哪里下手呢? 通常要找到加密逻辑的入口,最关键的信息就是 字符串 , 界面展示的字符串、请求数据中的字符串,都是很重要的突破口,这里既然直接在界面上展示出来了这个提示,我们就可以根据这些字符串在代码中全局搜索,定位突破口,首先搜索提示的关键字:

在这里插入图片描述

又遭滑铁卢-_- ,如果字符串不存在 代码 和 string.xml中,那说明了什么? 就是这段文字是后端返回的,那么又有了新的突破口,找网络请求,看看哪个接口返回了这段文字,接下来,准备一个Android 6.0以下的手机,抓包请求,看看有什么收获,抓包方法我就不介绍了,网上有很多,这里直接看结果: 在这里插入图片描述

嘿嘿,找到了,但是请求参数被加密了,现在可以得到的结论是, xxx.club/mdiiex/woaps 这个接口,上传了某些关于签名的信息,服务器校验后拒绝了请求,那这就是新的突破口,接下来在代码中搜索这个接口的相关逻辑: 在这里插入图片描述

这里看到的不是Java代码,是因为反编译工具通常很难100%的还原Java代码,总会有一些无法还原Java逻辑,直接用汇编语言展现了出来,这虽然给我们跟踪代码带来了一些困难,但找到地方了,阅读还是问题不大的,划红线的部分,如果用过okhttp不难看出这是一个okhttp 的 POST 请求 而标红的第二行代码,就是为 POST 请求添加 body 的代码,所以现在这个 post(r1) 是关键,知道 r1 的数据是如何构成的,就能找到上传的签名数据的入口,现在继续跟踪 变量r1 也就是标红的 第一行代码,可以看到r1 的数据来源在这个方法:

com.findtheway.util.Tools.a(r4, r1, r0)

那就根据路径,找到这个方法: 在这里插入图片描述 好了,方法找到了,接下来看看逻辑,这里就是请求body的参数组成,可以看出是先创建一个JSON,加入参数后,进行AES加密,然后返回加密后的String,但这些信息还不够,暂时有没有更好的突破口,那就先来看看这些数据被加密之前的原文是什么样的,有没有我们要找的签名信息

现在再AES加密之前注入一行Log,打印一下每次被加密的数据原文是什么,注入代码的方法见 Android逆向笔记(一):逆向工具使用,简单的代码插入、修改包名/文案 示例

在 Tools.smali 中注入Log,打印加密方法接收的两个参数: 在这里插入图片描述 重新打包运行看看结果: 在这里插入图片描述 这里看到打印出来的两个参数分别为:

参数1:AES秘钥,一串md5 AES 参数2:加密内容,一个Json

图中可以看到json的内容都是一些设备信息(图没截全,其他字段也都是没用的),不包含校验字段,那校验的变量就在这个 md5 秘钥里了,那又有了新的突破口,找这个md5是怎么生成的,首先看这个 md5 参数是怎么传过来的: 在这里插入图片描述

很明显,来自 i(context) 方法,那么继续跟踪这个方法: 在这里插入图片描述 在这里插入图片描述 . 好了现在找到md5的入口了,那还是老套路,在md5之前注入一行Log,看看被md5之前都有什么参数: 在这里插入图片描述 在这里插入图片描述

嘿嘿,是不是看到了什么眼熟的东西?这不是我签名的 SHA-1 吗?找到这个地方,是不是可以试试来一手 偷天换日、以假乱真、狸猫换太子了?先看看原版APP的签名 SHA-1是啥,jadx可以直接查看: 在这里插入图片描述

好了,现在只需要在刚刚插入log的地方,加加几行代码,Java逻辑如下(最终注入代码还是要用smali): 在这里插入图片描述 转成smali 代码插入Tools.smali : 在这里插入图片描述

好了,重新打包试下,成功进入主页,广告也没了,完美!(这里为不泄露原程序信息,码的比较厚,如果还有有同学认出来,还请请保持低调,大家都是共产主义接班人,好好学习,别干坏事哦): 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有